﻿using System;
using System.Text;
using System.Windows.Forms;
using Microsoft.SqlServer.Dts.Runtime;
using System.Data.SqlClient;
using System.Data;

namespace Bewise.SmartIndexManagerLT
{
    [DtsTask
    (
        // Nom affiché sur la ToolBox
    DisplayName = "SmartIndexManagerLT_IHM_DisplayName",
    Description = "SmartIndexManagerLT_IHM_Description",
    RequiredProductLevel = DTSProductLevel.None,
    TaskContact = "SmartIndexManagerLT_IHM_Contact",
    UITypeName =
            "Bewise.SmartIndexManagerLT.UI.SmartIndexManagerLT_IHM_UI, Bewise.SmartIndexManagerLT, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=9bee4de9d8510889"
    )]
    public class SmartIndexManagerLT_IHM : Task
    {
        // déclaration de notre Propriété publique SqlServerConnection qui va nous permettre de stocker une chaine de
        // caractère qui correspondra au nom du Connection Manager à utiliser.
        public string SqlServerConnection { get; set; }

        public string Query { get; set; }

        public string InitialCatalog { get; set; }

        public override DTSExecResult Execute(Connections connections, VariableDispenser variableDispenser, IDTSComponentEvents componentEvents, IDTSLogging log, object transaction)
        {
            DTSExecResult resultat;
            try
            {
                // Récupération de la connectionString partielle dans le ConnectionManager dont le nom est stocké dans "SqlServerConnection"
                var sqlConnectionStringBuilder = new SqlConnectionStringBuilder(connections[this.SqlServerConnection].ConnectionString);
                // ajout de la Base de données contenue dans la propriété InitialCatalog
                sqlConnectionStringBuilder.InitialCatalog = this.InitialCatalog;
                // instanciation de la connection
                using (var sqlConnection = new SqlConnection(sqlConnectionStringBuilder.ConnectionString))
                {
                    // ouveture de la connection
                    if (sqlConnection.State != ConnectionState.Open)
                        sqlConnection.Open();

                    // création de la commande avec la propriété "Query"
                    using (var sqlCommand = new SqlCommand(this.Query, sqlConnection))
                    {
                        using (var reader = sqlCommand.ExecuteReader(CommandBehavior.CloseConnection))
                        {
                            var sb = new StringBuilder();
                            while (reader.Read())
                            {
                                sb.AppendLine(reader[0].ToString());
                            }
                            MessageBox.Show(sb.ToString());
                        }
                    }
                }

                resultat = DTSExecResult.Success;
            }
            catch (Exception ex)
            {
                resultat = DTSExecResult.Failure;
                throw ex;
            }
            return resultat;
        }
    }
}